/** Classe controladora do banco de dados **/

package main;

import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;

public class ControladorBancoDeDados {

    private Connection bancoDeDados;
    
    public PreparedStatement insAluno;
    public PreparedStatement insCurso;
    public PreparedStatement insInscr;
    public PreparedStatement insNota;
    public PreparedStatement insAval;
    public PreparedStatement insPres;
    
    public ControladorBancoDeDados() {
        try {
            bancoDeDados = DriverManager.getConnection(
         "jdbc:hsqldb:hsql://localhost:9001/sfn-db",
         "SA",
         null);
            insAluno = bancoDeDados.prepareStatement("INSERT INTO ALUNO VALUES (?, ?)");
            insCurso = bancoDeDados.prepareStatement("INSERT INTO CURSO VALUES (?, ?, ?)");
            insInscr = bancoDeDados.prepareStatement("INSERT INTO INSC VALUES (?, ?, ?)");
            insNota = bancoDeDados.prepareStatement("INSERT INTO NOTAS VALUES (?, ?, ?, ?)");
            insAval = bancoDeDados.prepareStatement("INSERT INTO AVAL VALUES (?, ?, ?)");
            insPres = bancoDeDados.prepareStatement("INSERT INTO PRES VALUES (?, ?, ?)");
        } catch (SQLException ex) {
            Logger.getLogger(ControladorBancoDeDados.class.getName()).log(Level.SEVERE, null, ex);
            System.exit(1);
        }
    }
    
    public boolean insereAluno(int RA, String nome) {
        try {
            insAluno.setInt(1, RA);
            insAluno.setString(2, nome);
            insAluno.executeUpdate();
            return true;
        }
        catch (SQLException ex) {
            System.out.println(ex.getSQLState());
            return false;
        }
    }
    
    public boolean insereCurso(String codCurso, String nome, int numDeAulas) {
        try {
            insAluno.setString(1, codCurso);
            insAluno.setString(3, nome);
            insAluno.setInt(2, numDeAulas);
            insAluno.executeUpdate();
            return true;
        }
        catch (SQLException ex) {
            System.out.println(ex.getSQLState());
            return false;
        }
    }
    
    public boolean insereAval(String codAval, double peso, String desc) {
        try {
            insAluno.setString(1, codAval);
            insAluno.setDouble(2, peso);
            insAluno.setString(3, desc);
            insAluno.executeUpdate();
            return true;
        }
        catch (SQLException ex) {
            System.out.println(ex.getSQLState());
            return false;
        }
    }
    
    public boolean insereInsc(int RA, String codCurso, String turma) {
        try {
            insAluno.setInt(1, RA);
            insAluno.setString(2, codCurso);
            insAluno.setString(3, turma);
            insAluno.executeUpdate();
            return true;
        }
        catch (SQLException ex) {
            System.out.println(ex.getSQLState());
            return false;
        }
    }
    
    public boolean inserePres(int RA, String codCurso, Date data) {
        try {
            insAluno.setInt(1, RA);
            insAluno.setString(2, codCurso);
            insAluno.setDate(3, data);
            insAluno.executeUpdate();
            return true;
        }
        catch (SQLException ex) {
            System.out.println(ex.getSQLState());
            return false;
        }
    }
    
    public boolean insereNota(int RA, String codCurso, String codAval, float nota) {
        try {
            insAluno.setInt(1, RA);
            insAluno.setString(2, codCurso);
            insAluno.setString(3, codAval);
            insAluno.setDouble(4, nota);
            insAluno.executeUpdate();
            return true;
        }
        catch (SQLException ex) {
            System.out.println(ex.getSQLState());
            return false;
        }
    }
    
    public static void main(String[] args) {
        ControladorBancoDeDados test = new ControladorBancoDeDados();
        try {
            System.out.println(test.bancoDeDados.getMetaData().toString());
            Statement stm = test.bancoDeDados.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            ResultSet rst = stm.executeQuery("SELECT * FROM ALUNO");
            while(rst.next())
            {
                System.out.println(rst.getInt("RA") + " " + rst.getString("Nome"));
            }
            test.bancoDeDados.close();
        } catch (SQLException ex) {
            Logger.getLogger(ControladorBancoDeDados.class.getName()).log(Level.SEVERE, null, ex);
        }
        
    }
    
}
